package auth

import (
	wechat_official_account_openid_model "code.gitea.io/gitea/models/wechat"
	gitea_web_context "code.gitea.io/gitea/services/context"
	wechat_official_account_cache_service "code.gitea.io/gitea/services/wechat/cache"
	wechat_official_account_service "code.gitea.io/gitea/services/wechat/official_account"
)

// WechatOfficialAccountQrSignInSuccess 处理扫码登录用户Cookie保存等
//
//	由前端页面 window.location.href 跳转到 /user/login/wechat/official-account/success?ticket=${ticket}
func WechatOfficialAccountQrSignInSuccess(ctx *gitea_web_context.Context) {

	// 1. 取出 微信公众号二维码 ticket
	wechatQrTicket := ctx.Base.Req.URL.Query().Get("ticket")

	// 2. 取出扫码用户状态
	qrStatusVO, err := wechat_official_account_service.GetTempQRStatus(wechatQrTicket)
	if err != nil {
		// 重定向到主页，最终重定向到扫码登录页面
		ctx.Redirect("/")
		return
	}

	// 3. 检查用户扫码状态：已扫描、绑定，否则重定向到主页，最终重定向到扫码登录页面
	if qrStatusVO == nil || !qrStatusVO.IsScanned || !qrStatusVO.IsBinded {
		ctx.Redirect("/")
		return
	}
	// 5. 删除缓存中二维码 Ticket
	_ = wechat_official_account_cache_service.DeleteWechatOfficialAccountQrByTicket(wechatQrTicket)

	// 4. 查询数据库扫码人信息
	user, err := wechat_official_account_openid_model.QueryUserByOpenid(ctx, qrStatusVO.OpenId)

	// 4. 登录成功，跳转目标页面
	redirect := handleSignInFull(ctx, user, false, true)
	if ctx.Written() {
		return
	}
	ctx.Redirect(redirect)
	return
}
